// ts封装
import axios from 'axios'
import type {
  AxiosRequestConfig,
  AxiosResponse,
  InternalAxiosRequestConfig
} from 'axios'
// 默认参数
const defaultConfig = {
  timeout: 5000,
  baseUrl: ''
}
class Http {
  constructor() {
    this.httpInterceptorsRequest()
    this.httpInterceptorsResponse()
  }

  private static axiosInstance = axios.create(defaultConfig)
  private httpInterceptorsRequest() {
    // 类才能使用私有变量  Http.axiosInstance
    Http.axiosInstance.interceptors.request.use(
      (config: InternalAxiosRequestConfig) => {
        return config
      },
      (err) => {
        return Promise.reject(err)
      }
    )
  }

  private httpInterceptorsResponse() {
    // 响应拦截器
    Http.axiosInstance.interceptors.response.use(
      (response: AxiosResponse) => {
        return response
      },
      (err) => {
        return Promise.reject(err)
      }
    )
  }

  public httpGet<T>(url: string, params: AxiosRequestConfig): Promise<T> {
    return Http.axiosInstance
      .get(url, params)
      .then((res) => res.data)
      .catch()
  }

  public httpPost<T>(url: string, params: AxiosRequestConfig): Promise<T> {
    return Http.axiosInstance
      .post(url, params)
      .then((res) => res.data)
      .catch()
  }
}

export const http = new Http()

// import axios from 'axios'
// // 默认参数
// const defaultConfig = {
//   timeout: 5000,
//   baseUrl: ''
// }
// const axiosInstance = axios.create(defaultConfig)

// // 请求拦截器
// axiosInstance.interceptors.request.use(
//   (config) => {
//     return config
//   },
//   (err) => {
//     return Promise.reject(err)
//   }
// )
// // 响应拦截器
// axiosInstance.interceptors.response.use(
//   (config) => {
//     return config
//   },
//   (err) => {
//     return Promise.reject(err)
//   }
// )

// // 封装请求
// function httpRequestGet(url, params) {
//   return axiosInstance.get(url,params).then(res=> res.data).catch()
// }
// function httpRequestPost(url, params) {
//   return axiosInstance.post(url,params).then(res=> res.data).catch()
// }

// export default {
//   httpRequestGet,
//   httpRequestPost,
// }
